# 定义了一个没有类属性和实例属性的类、也没有实例方法
"""
class Person():
    pass
# 通过Person类，创建对象
wcs = Person() # 创建了一个叫做wcs对象
print(wcs) # <__main__.Person object at 0x01D8F5F0>
print(isinstance(wcs,Person)) # True
print(isinstance("asd",str)) # True
print(isinstance([12,1],list)) # True
# print(isinstance([12,1],tuple)) # False
"""
# 定义类，带有实例属性和方法
class Teacher:
    # 类属性
    classid = "19期"
    address = "沈阳市来测科技"

    # 相同的特征/属性/变量
    # 每一个对象初始化的时候，必须带有这些实例属性
    def __init__(self,name,age,sex): # __init__ 初始化方法
        self.name = name # 通过传入的name，赋值给了对象属性
        self.age = age
        self.sex = sex
    #函数/方法/技能
    def course(self):
        # self到底是什么？
        # self表示的就是对象，对象可以调用的方法
        print(self) # <__main__.Teacher object at 0x018D5430>  对象本身 地址值
        print('course')
        return 222
"""
# 通过Teacher创建对象
jc = Teacher("白嘉诚",18,"男") # 创建了一个叫做jc的对象，名字为白嘉诚，年龄18，性别男
# 打印对象属性
print(jc.name) # 打印名字
print(jc.age) # 18
print(jc.sex) # "男"
# 通过实例对象，调用方法
jc.course()
# 调用方法，接收返回值
print(jc.course()) # 222
Teacher("白嘉诚",18,"男").course() # 这样去调用，实际上也是先创建了对象，再去调用的类方法
# 打印类的全部属性
print(Teacher.__dict__)
# 修改类实例化对象的值
jc.name = "王长帅"
print(jc.name)
# 添加对象的属性
jc.play = "电脑"
print(jc.play)
# 删除对象的属性
del jc.name
print(jc.name) # error ，没有这个name
"""
"""
# 查看类属性
print(Teacher.address) # 访问address类属性
# print(Teacher.name) # todo：错误！除非是以对象的方式去调用它
# 添加类属性
Teacher.shopping = "商场"
print(Teacher.shopping)
# 修改类属性
Teacher.address = "辽宁省沈阳市沈河区旭辉中心B座3301来测科技"
print(Teacher.address)
# 删除类属性
del Teacher.classid
print(Teacher.classid) # AttributeError: type object 'Teacher' has no attribute 'classid'
"""
# print(Teacher.__dict__)
# 对象独有的属性（如果没有独有的，从类里面去要）
# t1 = Teacher("王长",22,"男")
# print(t1.address) # 实例属性——》类属性  沈阳市来测科技
# print(t1.course())
# 定义类，没有带有实例属性
class Student:
    # 没有__init__
    def eat(self):
        print("吃饭")
"""
s1 = Student()
print(s1.__dict__)
s1.name = "王帅"
s1.play = "篮球"
print(s1.__dict__)
"""

# 1. 先定义类
class Teacher1:
    # 相同的特征/属性/变量
    school = 'buzaoya'
    xxx = '我是类的属性,也可能是对象的属性'
    yyy = 111
    # 这个不对 不应该定义成类属性
    # name='龙仔'
    # age=18
    # sex='男'
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
        # 函数/方法/技能
    def course(self):
        # self到底是什么?
        # self当作一个位置参数
        print(self) # <__main__.Teacher1 object at 0x01D5EC90>
        print('course') # course
        print(self.name) # 王帅
        print('--------------')
        print('我是龙仔的属性%s' % self.name)
        print('我是龙仔的属性%s' % self.age)
        return '11111'
t1 = Teacher1("王帅",19,"女")
t2 = Teacher1("嘉诚",12,"男")
# 类属性：对象可以调用，类也可以直接调用
print(t1.xxx)
print(Teacher1.xxx)
# 调用course方法，只能是类对象/实例对象 去调用

print(t1.course()) #
print(t2.course()) #
# print(Teacher1.name) # error
# print(Teacher1.course()) # 类无法直接调用类方法

# 类调用方法必须传入self参数对应的对象,因为方法里面需要使用这个self对象
Teacher1.course(t1) # 实际上，还是对象调用的类方法，而不是类调用



